package ar.uba.fi.algo3.tests;

import org.junit.Test;

import ar.uba.fi.algo3.auxiliares.*;
import ar.uba.fi.algo3.modelo.CampoBatalla;
import ar.uba.fi.algo3.modelo.astillero.*;
import ar.uba.fi.algo3.modelo.nave.Nave;

import junit.framework.TestCase;

public class MovimientoLanchaTest extends TestCase {
	
	Astillero fabrica;
	Direccion direccion;
	CampoBatalla unCampoBatalla;
	
	public void setUp (){
		
		fabrica= new AstilleroDeLanchas();
		unCampoBatalla= new CampoBatalla();
	}
	 
	@Test
	public void testMoverLanchaALaDerecha (){
				
		Posicion unaPosicion= new Posicion(7,1);
		direccion= new DireccionDerecha();
		Nave unaLancha= fabrica.crearNaveEn(unaPosicion, unCampoBatalla, direccion);
		
		assertEquals(unaLancha.obtenerComponentes().get(0).getPosicion().getX(),7);
		assertEquals(unaLancha.obtenerComponentes().get(0).getPosicion().getY(),1);
		
		assertEquals(unaLancha.obtenerComponentes().get(1).getPosicion().getX(),8);
		assertEquals(unaLancha.obtenerComponentes().get(1).getPosicion().getY(),1);
		
		unaLancha.moverNaves();
		
		assertEquals(unaLancha.obtenerComponentes().get(0).getPosicion().getX(),8);
		assertEquals(unaLancha.obtenerComponentes().get(0).getPosicion().getY(),1);
		
		assertEquals(unaLancha.obtenerComponentes().get(1).getPosicion().getX(),9);
		assertEquals(unaLancha.obtenerComponentes().get(1).getPosicion().getY(),1);

		unaLancha.moverNaves();
		
		assertEquals(unaLancha.obtenerComponentes().get(0).getPosicion().getX(),7);
		assertEquals(unaLancha.obtenerComponentes().get(0).getPosicion().getY(),1);
		
		assertEquals(unaLancha.obtenerComponentes().get(1).getPosicion().getX(),8);
		assertEquals(unaLancha.obtenerComponentes().get(1).getPosicion().getY(),1);		
	}
		
	@Test
	public void testMoverLanchaALaIzquierda (){
		
		Posicion unaPosicion= new Posicion(1,0);
		direccion= new DireccionIzquierda();
		Nave unaLancha= fabrica.crearNaveEn(unaPosicion, unCampoBatalla, direccion);
		
		assertEquals(unaLancha.obtenerComponentes().get(0).getPosicion().getX(),1);
		assertEquals(unaLancha.obtenerComponentes().get(0).getPosicion().getY(),0);
		
		assertEquals(unaLancha.obtenerComponentes().get(1).getPosicion().getX(),2);
		assertEquals(unaLancha.obtenerComponentes().get(1).getPosicion().getY(),0);	
		
		unaLancha.moverNaves();
		
		assertEquals(unaLancha.obtenerComponentes().get(0).getPosicion().getX(),0);
		assertEquals(unaLancha.obtenerComponentes().get(0).getPosicion().getY(),0);
		
		assertEquals(unaLancha.obtenerComponentes().get(1).getPosicion().getX(),1);
		assertEquals(unaLancha.obtenerComponentes().get(1).getPosicion().getY(),0);
		
		unaLancha.moverNaves();
		
		assertEquals(unaLancha.obtenerComponentes().get(0).getPosicion().getX(),1);
		assertEquals(unaLancha.obtenerComponentes().get(0).getPosicion().getY(),0);
		
		assertEquals(unaLancha.obtenerComponentes().get(1).getPosicion().getX(),2);
		assertEquals(unaLancha.obtenerComponentes().get(1).getPosicion().getY(),0);
	}
	
	@Test
	public void testMoverLanchaHaciaArriba (){
		
		Posicion unaPosicion= new Posicion(1,1);
		direccion= new DireccionSuperior();
		Nave unaLancha= fabrica.crearNaveEn(unaPosicion, unCampoBatalla, direccion);
		
		assertEquals(unaLancha.obtenerComponentes().get(0).getPosicion().getX(),1);
		assertEquals(unaLancha.obtenerComponentes().get(0).getPosicion().getY(),1);
		
		assertEquals(unaLancha.obtenerComponentes().get(1).getPosicion().getX(),2);
		assertEquals(unaLancha.obtenerComponentes().get(1).getPosicion().getY(),1);
		
		unaLancha.moverNaves();
		
		assertEquals(unaLancha.obtenerComponentes().get(0).getPosicion().getX(),1);
		assertEquals(unaLancha.obtenerComponentes().get(0).getPosicion().getY(),0);
		
		assertEquals(unaLancha.obtenerComponentes().get(1).getPosicion().getX(),2);
		assertEquals(unaLancha.obtenerComponentes().get(1).getPosicion().getY(),0);
		
		unaLancha.moverNaves();
		
		assertEquals(unaLancha.obtenerComponentes().get(0).getPosicion().getX(),1);
		assertEquals(unaLancha.obtenerComponentes().get(0).getPosicion().getY(),1);
		
		assertEquals(unaLancha.obtenerComponentes().get(1).getPosicion().getX(),2);
		assertEquals(unaLancha.obtenerComponentes().get(1).getPosicion().getY(),1);		
	}
	
	@Test
	public void testMoverLanchaHaciaAbajo (){
		
		Posicion unaPosicion= new Posicion(0,8);
		direccion= new DireccionInferior();
		Nave unaLancha= fabrica.crearNaveEn(unaPosicion, unCampoBatalla, direccion);
		
		assertEquals(unaLancha.obtenerComponentes().get(0).getPosicion().getX(),0);
		assertEquals(unaLancha.obtenerComponentes().get(0).getPosicion().getY(),8);
		
		assertEquals(unaLancha.obtenerComponentes().get(1).getPosicion().getX(),1);
		assertEquals(unaLancha.obtenerComponentes().get(1).getPosicion().getY(),8);		
		
		unaLancha.moverNaves();
		
		assertEquals(unaLancha.obtenerComponentes().get(0).getPosicion().getX(),0);
		assertEquals(unaLancha.obtenerComponentes().get(0).getPosicion().getY(),9);
		
		assertEquals(unaLancha.obtenerComponentes().get(1).getPosicion().getX(),1);
		assertEquals(unaLancha.obtenerComponentes().get(1).getPosicion().getY(),9);
		
		unaLancha.moverNaves();
		
		assertEquals(unaLancha.obtenerComponentes().get(0).getPosicion().getX(),0);
		assertEquals(unaLancha.obtenerComponentes().get(0).getPosicion().getY(),8);
		
		assertEquals(unaLancha.obtenerComponentes().get(1).getPosicion().getX(),1);
		assertEquals(unaLancha.obtenerComponentes().get(1).getPosicion().getY(),8);

	}	
	
	@Test
	public void testMoverLanchaDiagonalDerechaSuperior (){
		
		Posicion unaPosicion= new Posicion(7,1);
		direccion= new DireccionDerechaSuperior();
		Nave unaLancha= fabrica.crearNaveEn(unaPosicion, unCampoBatalla, direccion);
		
		assertEquals(unaLancha.obtenerComponentes().get(0).getPosicion().getX(),7);
		assertEquals(unaLancha.obtenerComponentes().get(0).getPosicion().getY(),1);
		
		assertEquals(unaLancha.obtenerComponentes().get(1).getPosicion().getX(),8);
		assertEquals(unaLancha.obtenerComponentes().get(1).getPosicion().getY(),1);	
		
		unaLancha.moverNaves();
		
		assertEquals(unaLancha.obtenerComponentes().get(0).getPosicion().getX(),8);
		assertEquals(unaLancha.obtenerComponentes().get(0).getPosicion().getY(),0);
		
		assertEquals(unaLancha.obtenerComponentes().get(1).getPosicion().getX(),9);
		assertEquals(unaLancha.obtenerComponentes().get(1).getPosicion().getY(),0);
		
		unaLancha.moverNaves();
		
		assertEquals(unaLancha.obtenerComponentes().get(0).getPosicion().getX(),7);
		assertEquals(unaLancha.obtenerComponentes().get(0).getPosicion().getY(),1);
		
		assertEquals(unaLancha.obtenerComponentes().get(1).getPosicion().getX(),8);
		assertEquals(unaLancha.obtenerComponentes().get(1).getPosicion().getY(),1);
	}
	
	@Test
	public void testMoverLanchaDerechaInferior (){
		
		Posicion unaPosicion= new Posicion(7,8);
		direccion= new DireccionDerechaInferior();
		Nave unaLancha= fabrica.crearNaveEn(unaPosicion, unCampoBatalla, direccion);
		
		assertEquals(unaLancha.obtenerComponentes().get(0).getPosicion().getX(),7);
		assertEquals(unaLancha.obtenerComponentes().get(0).getPosicion().getY(),8);
		
		assertEquals(unaLancha.obtenerComponentes().get(1).getPosicion().getX(),8);
		assertEquals(unaLancha.obtenerComponentes().get(1).getPosicion().getY(),8);
		
		unaLancha.moverNaves();
		
		assertEquals(unaLancha.obtenerComponentes().get(0).getPosicion().getX(),8);
		assertEquals(unaLancha.obtenerComponentes().get(0).getPosicion().getY(),9);
		
		assertEquals(unaLancha.obtenerComponentes().get(1).getPosicion().getX(),9);
		assertEquals(unaLancha.obtenerComponentes().get(1).getPosicion().getY(),9);
		
		unaLancha.moverNaves();
		
		assertEquals(unaLancha.obtenerComponentes().get(0).getPosicion().getX(),7);
		assertEquals(unaLancha.obtenerComponentes().get(0).getPosicion().getY(),8);
		
		assertEquals(unaLancha.obtenerComponentes().get(1).getPosicion().getX(),8);
		assertEquals(unaLancha.obtenerComponentes().get(1).getPosicion().getY(),8);
				
	}
	
	@Test
	public void testMoverLanchaDiagonalIzquierdaSuperior (){
		
		Posicion unaPosicion= new Posicion(1,1);
		direccion= new DireccionIzquierdaSuperior();
		Nave unaLancha= fabrica.crearNaveEn(unaPosicion, unCampoBatalla, direccion);
		
		assertEquals(unaLancha.obtenerComponentes().get(0).getPosicion().getX(),1);
		assertEquals(unaLancha.obtenerComponentes().get(0).getPosicion().getY(),1);
		
		assertEquals(unaLancha.obtenerComponentes().get(1).getPosicion().getX(),2);
		assertEquals(unaLancha.obtenerComponentes().get(1).getPosicion().getY(),1);		
		
		unaLancha.moverNaves();
		
		assertEquals(unaLancha.obtenerComponentes().get(0).getPosicion().getX(),0);
		assertEquals(unaLancha.obtenerComponentes().get(0).getPosicion().getY(),0);
		
		assertEquals(unaLancha.obtenerComponentes().get(1).getPosicion().getX(),1);
		assertEquals(unaLancha.obtenerComponentes().get(1).getPosicion().getY(),0);
		
		unaLancha.moverNaves();
		
		assertEquals(unaLancha.obtenerComponentes().get(0).getPosicion().getX(),1);
		assertEquals(unaLancha.obtenerComponentes().get(0).getPosicion().getY(),1);
		
		assertEquals(unaLancha.obtenerComponentes().get(1).getPosicion().getX(),2);
		assertEquals(unaLancha.obtenerComponentes().get(1).getPosicion().getY(),1);
	}
	
	@Test
	public void testMoverLanchaIzquierdaInferior (){
		
		Posicion unaPosicion= new Posicion(1,8);
		direccion= new DireccionIzquierdaInferior();
		Nave unaLancha= fabrica.crearNaveEn(unaPosicion, unCampoBatalla, direccion);
		
		assertEquals(unaLancha.obtenerComponentes().get(0).getPosicion().getX(),1);
		assertEquals(unaLancha.obtenerComponentes().get(0).getPosicion().getY(),8);
		
		assertEquals(unaLancha.obtenerComponentes().get(1).getPosicion().getX(),2);
		assertEquals(unaLancha.obtenerComponentes().get(1).getPosicion().getY(),8);	
		
		unaLancha.moverNaves();
		
		assertEquals(unaLancha.obtenerComponentes().get(0).getPosicion().getX(),0);
		assertEquals(unaLancha.obtenerComponentes().get(0).getPosicion().getY(),9);
		
		assertEquals(unaLancha.obtenerComponentes().get(1).getPosicion().getX(),1);
		assertEquals(unaLancha.obtenerComponentes().get(1).getPosicion().getY(),9);
		
		unaLancha.moverNaves();
		
		assertEquals(unaLancha.obtenerComponentes().get(0).getPosicion().getX(),1);
		assertEquals(unaLancha.obtenerComponentes().get(0).getPosicion().getY(),8);
		
		assertEquals(unaLancha.obtenerComponentes().get(1).getPosicion().getX(),2);
		assertEquals(unaLancha.obtenerComponentes().get(1).getPosicion().getY(),8);
	}
	
}


